<!DOCTYPE html>
<title>Historical DOM features must be removed</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
function isInterfaceNuked(name) {
  test(function() {
    assert_equals(window[name], undefined)
  }, "Historical DOM features must be removed: " + name)
}
var nukedInterfaces = [
  "CDATASection",
  "DOMConfiguration",
  "DOMError",
  "DOMErrorHandler",
  "DOMImplementationList",
  "DOMImplementationSource",
  "DOMLocator",
  "DOMObject",
  "DOMUserData",
  "Entity",
  "EntityReference",
  "EventException", // DOM Events
  "NameList",
  "Notation",
  "TypeInfo",
  "UserDataHandler",
  "RangeException" // DOM Range
]
nukedInterfaces.forEach(isInterfaceNuked)

function isNukedFromDocument(name) {
  test(function() {
    var doc = document.implementation.createDocument(null,null,null)
    assert_equals(document[name], undefined)
    assert_equals(doc[name], undefined)
  }, "Historical DOM features must be removed: " + name)
}
var documentNuked = [
  "createCDATASection",
  "createEntityReference",
  "xmlEncoding",
  "xmlStandalone",
  "xmlVersion",
  "strictErrorChecking",
  "domConfig",
  "normalizeDocument",
  "renameNode",
  "charset",
  "defaultCharset",
  "height",
  "width"
]
documentNuked.forEach(isNukedFromDocument)

test(function() {
  assert_equals(document.implementation["getFeature"], undefined)
}, "DOMImplementation.getFeature() must be nuked.")

function isNukedFromElement(name) {
  test(function() {
    var ele = document.createElementNS("test", "test")
    assert_equals(document.body[name], undefined)
    assert_equals(ele[name], undefined)
  }, "Historical DOM features must be removed: " + name)
}
var elementNuked = [
  "schemaTypeInfo",
  "setIdAttribute",
  "setIdAttributeNS",
  "setIdAttributeNode"
]
elementNuked.forEach(isNukedFromElement)

function isNukedFromDoctype(name) {
  test(function() {
    var doctype = document.implementation.createDocumentType("test", "", "")
    assert_equals(doctype[name], undefined)
  }, "DocumentType member must be nuked: " + name)
}
var doctypeNuked = [
  "entities",
  "notations",
  "internalSubset"
]
doctypeNuked.forEach(isNukedFromDoctype)

function isNukedFromText(name) {
  test(function() {
    var text = document.createTextNode("test")
    assert_equals(text[name], undefined)
  }, "Text member must be nuked: " + name)
}
var textNuked = [
  "isElementContentWhitespace",
  "replaceWholeText"
]
textNuked.forEach(isNukedFromText)

function isNukedFromNode(name) {
  test(function() {
    var doc = document.implementation.createDocument(null,null,null)
    var doctype = document.implementation.createDocumentType("test", "", "")
    var text = document.createTextNode("test")
    assert_equals(doc[name], undefined)
    assert_equals(doctype[name], undefined)
    assert_equals(text[name], undefined)
  }, "Node member must be nuked: " + name)
}
var nodeNuked = [
  "hasAttributes",
  "attributes",
  "namespaceURI",
  "prefix",
  "localName",
  "isSupported",
  "getFeature",
  "getUserData",
  "setUserData"
]
nodeNuked.forEach(isNukedFromNode)

function isNukedFromWindow(name) {
  test(function() {
    assert_equals(window[name], undefined)
  }, "Window member must be nuked: " + name)
}
var windowNuked = [
  "attachEvent"
]
windowNuked.forEach(isNukedFromWindow)
</script>
